package swing.chapter01;

import javax.swing.*;
import java.util.concurrent.TimeUnit;

/**
 * 03, 要想不会发生冲突，则需要程序中的所有 UI 操作都遵守这种通过 SwingUtilities.invokeLater() 方式来提交操作， 正确的代码参考 SubmitSwingProgram.java
 */
public class SubmitLabelManipulationTask {
    public static void main(String[] args) throws InterruptedException {
        JFrame frame = new JFrame("Swing Hello");
        JLabel label = new JLabel("3 秒钟后会发生了变化");
        frame.add(label);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setSize(300, 300);
        frame.setVisible(true);

        TimeUnit.SECONDS.sleep(3);
        // 通过 Swing 的事件分发线程提交要执行的任务（任务会放置到待执行队列中，最终将会得到执行）。
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                label.setText("...  ^_^  ...");
            }
        });

    }
}
